// 测试 `global object` 的部分函数

// 全局函数 isFinite 用于判断参数是否是有穷大
console.log( isFinite( 100 ) ); // true
console.log( isFinite( Infinity ) ); // false
console.log( isFinite( -Infinity ) ); // false
console.log( isFinite( NaN ) ); // false
console.log( isFinite( undefined ) ); // false
console.log( isFinite( null ) ); // true

console.log( '- '.repeat(20) );

// 全局函数 isNaN 用于判断参数是否不是一个数字
console.log( isNaN( 100 ) ); // false
console.log( isNaN( Infinity ) ); // false
console.log( isNaN( NaN ) ); // true
console.log( isNaN( undefined ) ); // true
console.log( isNaN( null ) ); // false

console.log( '- '.repeat(10) );

// 将字符串解析为整数
console.log( parseInt('王某然是不是西安人') );
// 默认按照十进制将字符串解析为整数
console.log( parseInt('1001010') );
console.log( parseInt('1001010', 2 ) );
console.log( parseInt('1001010', 8 ) );
console.log( parseInt('1001010', 16 ) );
console.log( parseInt('1001010', 36 ) );

// 将字符串解析为浮点数
console.log( parseFloat('3.14') );

console.log( '- '.repeat(10) );

const source = '/search?key=李芳';
const encoded = encodeURI( source );
console.log( encoded );
const decoded = decodeURI( encoded );
console.log( decoded );

const encodedUri = encodeURIComponent(source); 
console.log( encodedUri );

const decodedUri = decodeURIComponent(encodedUri);
console.log( decodedUri );

console.log( '- '.repeat(10) );


let action = function(a, b){
    console.log( `${a} + ${b} = ${a+b}`);
}

let delay = 5000;

// setTimeout( action, delay [, ...params] )
// 作用: 在指定的延迟(delay)之后执行指定的操作(action)
//       可以通过 setTimeout 的第三个参数及其之后的参数依次为 action 传递参数
// 返回: 在浏览器环境下返回一个整数标识符；在node.js环境下返回一个Timeout实例
const timer1 = setTimeout( action, delay, 10, 20 );
console.log( timer1 );

let begin;
let handler = function(){
    let ms = Date.now();
    if( ms >= begin + 10000 ) {
        clearInterval(timer2); // 清除定时任务
    }
    console.log( ms );
}
let interval = 1000;
// setInterval( handler, interval [, ...params] )
// 作用: 创建用于周期性执行的任务。
//       参数 handler 就是需要周期性执行的操作，参数 interval 表示两次操作间隔时长
//       可以通过 setInterval 的第三个参数及其之后的参数依次为handler传递参数
// 返回: 在浏览器环境下返回一个整数标识符；在node.js环境下返回一个Timeout实例
const timer2 = setInterval( handler, interval, 10, 20 );
begin = Date.now();